package jch.learn.java.basics.chapter3;

/**
 * 基本数据类型
 * @author: 金迩道
 * @create: 2019/09/05 21:58
 * // 同一个Java文件中只能存在一个public 修饰的类
 *
 * Java类变量声明格式：修饰符 数据类型 变量名[=(赋值符） 值]
 **/
public class BasicDataType {

    /*--------------------------------整形-----------------------------------------*/

    /**
     * 公开静态类变量(public static 修饰 可通过 类名.变量名 的方式引用） | 可重新赋值
     * public 修饰的变量 可在其他类中引用（无使用区域限制）
     *
     * 基本数据类型： byte（关键字）|  所占存储空间： 1 字节 | 取值范围： -128 -- 127
     */
    public static byte aByte=1;

    /**
     * 私有静态类变量（private static 修饰 无法通过 类名.类变量名调用） 与 private 数据类型  变量 一样的效果
     * 这样定义无实际意义
     *
     * private 修饰的类变量 可在自身类区域内调用（访问） 赋值 可通过public 修饰的 set 或 get 方法 进行赋值或调用
     *
     * 基本数据类型：short（关键字）| 所占存储空间： 2 字节 | 取值范围：-32768 -- 32767
     */
    private static short aShort=1;

    /**
     * 私有非静态类变量
     *
     * 基本数据类型：int（关键字）| 所占存储空间：4字节 | 取值范围：-2147483648 -- 2147483647
     */
    private int anInt = 1;

    /**
     * 公共非静态类变量 （可通过 类名.类变量名 调用）
     *
     * 基本数据类型：long（关键字）| 所占存储空间：8字节 | 取值范围：-9223372036854775808 -- 9223372036854775807
     * 通常情况下 定义long类型的变量时 数值后加一个 L 或 l
     */
    public long aLong = 1;

    /*--注意：Java整型基础数据类型的取值范围与运行Java代码的机器无关--*/
    /*--注意：Java没有任何无符号（unsigned）形式的int、long、short或byte类型--*/


    /**
     * 公开的内部类
     * 无法在外部声明实例
     */
    public class Inside{
        /*内部非静态类 不能声明主方法（入口方法）*/
      /*public static void main(String[] args) {
            System.out.println("test");
        }*/

      public void test(){
          System.out.println(aShort);
      }
    }

    /**
     * 公开的内部静态类
     * 可在外部声明实例
     */
    public static class Inside1{
        public static void main(String[] args) {
            /*私有静态类变量内部可使用*/
            System.out.println(aShort);
        }
    }

    /**
     * 私有内部类
     * private 修饰的内部类 仅供其上级类内部调用
     */
    private class Inside2{
        /*public static void main(String[] args) {

        }*/
    }

    /**
     * 私有静态内部类
     */
    private static class Inside3{
        public static void main(String[] args) {
            System.out.println(aShort);
        }
    }

    /**
     * 受保护的内部类
     */
    protected class Inside4{
        /*public static void main(String[] args) {

        }*/
    }

    /**
     * 默认的内部类
     * 可在同一包下被调用
     *  默认非静态内部类 无法在同一包下创建实例 也无法在外部包下创建实例
     */
    class Inside5{
        /*public static void main(String[] args) {

        }*/

        public void test(){
            System.out.println("test");
        }
    }

    /**
     * 静态默认修饰符内部类
     * 可在同一包下创建实例  在其他包无法创建实例
     */
    static class Inside6{
        public static void main(String[] args) {
            System.out.println("test");
        }
    }
}

/**
 * 同文件Java类
 * 只能在同一包下使用
 */
class WithTheFile {
    public static void main(String[] args) {
        BasicDataType.aByte=2;
        System.out.println(BasicDataType.aByte);
        /*从Java 7 开始，加上前缀0b或0B可以写二进制*/
        System.out.println(0b1001);
    }
}